summaryrefslogtreecommitdiff
path: root/app/[lng]/admin/edp/actions/contract-actions.ts
diff options
context:
space:
mode:
Diffstat (limited to 'app/[lng]/admin/edp/actions/contract-actions.ts')
-rw-r--r--app/[lng]/admin/edp/actions/contract-actions.ts200
1 files changed, 200 insertions, 0 deletions
diff --git a/app/[lng]/admin/edp/actions/contract-actions.ts b/app/[lng]/admin/edp/actions/contract-actions.ts
new file mode 100644
index 00000000..f6e1bed2
--- /dev/null
+++ b/app/[lng]/admin/edp/actions/contract-actions.ts
@@ -0,0 +1,200 @@
+'use server'
+
+import db from '@/db/db'
+import { contracts, contractItems } from '@/db/schema/contract'
+import { eq } from 'drizzle-orm'
+
+// 계약 생성 타입 정의
+export interface CreateContractData {
+ projectId: number
+ vendorId: number
+ contractName: string
+ status?: string
+}
+
+// 계약 아이템 생성 타입 정의
+export interface CreateContractItemData {
+ contractId: number
+ itemId: number
+ description?: string
+ quantity?: number
+ unitPrice?: number
+}
+
+// 계약 생성
+export async function createContract(data: CreateContractData) {
+ try {
+ // contractNo 생성 (간단한 방식으로 timestamp 기반)
+ const contractNo = `TEST-${Date.now()}`
+
+ const [newContract] = await db.insert(contracts).values({
+ projectId: data.projectId,
+ vendorId: data.vendorId,
+ contractNo,
+ contractName: data.contractName,
+ status: data.status || 'TEST',
+ }).returning({
+ id: contracts.id,
+ contractNo: contracts.contractNo,
+ contractName: contracts.contractName,
+ status: contracts.status,
+ })
+
+ return {
+ success: true,
+ data: newContract,
+ message: '계약이 성공적으로 생성되었습니다.'
+ }
+ } catch (error) {
+ console.error('계약 생성 오류:', error)
+ return {
+ success: false,
+ error: '계약을 생성할 수 없습니다.'
+ }
+ }
+}
+
+// 계약 아이템 생성
+export async function createContractItem(data: CreateContractItemData) {
+ try {
+ const [newContractItem] = await db.insert(contractItems).values({
+ contractId: data.contractId,
+ itemId: data.itemId,
+ description: data.description,
+ quantity: data.quantity || 1,
+ unitPrice: data.unitPrice,
+ }).returning({
+ id: contractItems.id,
+ contractId: contractItems.contractId,
+ itemId: contractItems.itemId,
+ quantity: contractItems.quantity,
+ })
+
+ return {
+ success: true,
+ data: newContractItem,
+ message: '계약 아이템이 성공적으로 생성되었습니다.'
+ }
+ } catch (error) {
+ console.error('계약 아이템 생성 오류:', error)
+ return {
+ success: false,
+ error: '계약 아이템을 생성할 수 없습니다.'
+ }
+ }
+}
+
+// 여러 계약 아이템 일괄 생성
+export async function createMultipleContractItems(contractId: number, itemsData: Omit<CreateContractItemData, 'contractId'>[]) {
+ try {
+ const itemsToInsert = itemsData.map(item => ({
+ contractId,
+ itemId: item.itemId,
+ description: item.description,
+ quantity: item.quantity || 1,
+ unitPrice: item.unitPrice,
+ }))
+
+ const newContractItems = await db.insert(contractItems).values(itemsToInsert).returning({
+ id: contractItems.id,
+ contractId: contractItems.contractId,
+ itemId: contractItems.itemId,
+ quantity: contractItems.quantity,
+ })
+
+ return {
+ success: true,
+ data: newContractItems,
+ message: `${newContractItems.length}개의 계약 아이템이 성공적으로 생성되었습니다.`
+ }
+ } catch (error) {
+ console.error('계약 아이템 일괄 생성 오류:', error)
+ return {
+ success: false,
+ error: '계약 아이템을 일괄 생성할 수 없습니다.'
+ }
+ }
+}
+
+// 계약 수정
+export async function updateContract(contractId: number, data: Partial<CreateContractData>) {
+ try {
+ const [updatedContract] = await db.update(contracts)
+ .set({
+ projectId: data.projectId,
+ vendorId: data.vendorId,
+ contractName: data.contractName,
+ status: data.status,
+ updatedAt: new Date(),
+ })
+ .where(eq(contracts.id, contractId))
+ .returning({
+ id: contracts.id,
+ contractNo: contracts.contractNo,
+ contractName: contracts.contractName,
+ status: contracts.status,
+ })
+
+ return {
+ success: true,
+ data: updatedContract,
+ message: '계약이 성공적으로 수정되었습니다.'
+ }
+ } catch (error) {
+ console.error('계약 수정 오류:', error)
+ return {
+ success: false,
+ error: '계약을 수정할 수 없습니다.'
+ }
+ }
+}
+
+// 계약 아이템 수정
+export async function updateContractItem(contractItemId: number, data: Partial<CreateContractItemData>) {
+ try {
+ const [updatedContractItem] = await db.update(contractItems)
+ .set({
+ description: data.description,
+ quantity: data.quantity,
+ unitPrice: data.unitPrice,
+ updatedAt: new Date(),
+ })
+ .where(eq(contractItems.id, contractItemId))
+ .returning({
+ id: contractItems.id,
+ contractId: contractItems.contractId,
+ itemId: contractItems.itemId,
+ quantity: contractItems.quantity,
+ })
+
+ return {
+ success: true,
+ data: updatedContractItem,
+ message: '계약 아이템이 성공적으로 수정되었습니다.'
+ }
+ } catch (error) {
+ console.error('계약 아이템 수정 오류:', error)
+ return {
+ success: false,
+ error: '계약 아이템을 수정할 수 없습니다.'
+ }
+ }
+}
+
+// 계약 아이템 삭제
+export async function deleteContractItem(contractItemId: number) {
+ try {
+ await db.delete(contractItems).where(eq(contractItems.id, contractItemId))
+
+ return {
+ success: true,
+ message: '계약 아이템이 성공적으로 삭제되었습니다.'
+ }
+ } catch (error) {
+ console.error('계약 아이템 삭제 오류:', error)
+ return {
+ success: false,
+ error: '계약 아이템을 삭제할 수 없습니다.'
+ }
+ }
+}